﻿#ifndef CPU_H
#define CPU_H

// cpu信息
typedef struct {
    char vendor[128];                   /*!< cpu的供应商 */
    char model[128];                    /*!< cpu的类别 */
    int mhz;                            /*!< cpu的主频（单位：MHZ）*/
    int mhz_max;
    int mhz_min;
    unsigned long long cache_size;      /*!< 缓冲存储器数量 */
    int total_sockets;                  /*!< cpu Sockets插槽总数 */
    int total_cores;                    /*!< cpu内核总数 */
    int cores_per_socket;               /*!< 每个cpu插槽核数/每颗物理cpu核数 */
} demo_cpu_info;

// cpu信息列表
typedef struct {
    unsigned long number;               /*!< cpu个数 */
    unsigned long size;
    demo_cpu_info *data;                /*!< cpu数据，本身是一个数组*/
} demo_cpu_info_list;

// cpu当前使用状态（暂时不知道拿到的数据单位是什么，是通常所说的字节还是赫兹？）
typedef struct {
    unsigned long long  user;           /*!< cpu用户使用量 */
    unsigned long long sys;             /*!< cpu系统使用量 */
    unsigned long long nice;            /*!< cpu当前错误量 */
    unsigned long long idle;            /*!< cpu当前空闲量 */
    unsigned long long wait;            /*!< cpu当前等待量 */
    unsigned long long irq;             /*!< cpu中断请求量 */
    unsigned long long soft_irq;
    unsigned long long stolen;
    unsigned long long total;           /*!< cpu总量 */
} dome_cpu_stat;

// cpu状态列表
typedef struct {
    unsigned long number;
    unsigned long size;
    dome_cpu_stat *data;
} dome_cpu_stat_list;

// cpu各种项数据统计，比如使用率，空闲率等
typedef struct {
    double user;                        /*!< cpu用户使用率 */
    double sys;                         /*!< cpu系统使用率 */
    double nice;                        /*!< cpu当前错误率 */
    double idle;                        /*!< cpu当前空闲率 */
    double wait;                        /*!< cpu当前等待率 */
    double irq;                         /*!< cpu中断请求率 */
    double soft_irq;
    double stolen;
    double combined;                    /*!< cpu总的使用率 */
} dome_cpu_perc;

// cpu状态列表
typedef struct {
    unsigned long number;               /*!< cpu个数 */
    unsigned long size;
    dome_cpu_perc *data;                /*!< cpu数据统计数组 */
} dome_cpu_perc_list;

class cpu
{
public:
    cpu();

    int cpu_test();

    //获取cpc信息
    void getCpuInfo(demo_cpu_info_list &infoList);

    //获取cpu当前状态
    void getCpuStat(dome_cpu_stat_list &cpu_stat_list);

    //获取cpu使用率等
    void getCpuPerc(dome_cpu_perc_list &cpu_perc_list);
};

#endif // CPU_H
